Amazon Qを使用してAWS CloudFormationのテンプレートを作成してみた
こんにちは。まるとです。
皆さんはAmazon Qを活用していますか?
今回はAmazon QとAWS CloudFormationを組み合わせて使ってみたところ、驚くほどテンプレート作成が捗ったので記事にしたいと思います。
先にまとめ
- コメントを書くだけで効率よくテンプレート作成ができる
- Nameタグなど、今まで設定した内容を元にうまく生成してくれる
- 完璧なものができる、という訳ではなく生成内容の確認は必要
- Amazon Q Developerを使うことで作業効率が向上し、より快適に作業できると感じました(個人の感想)
Amazon Qとは
AWSが提供している生成AIアシスタントです。
Amazon Qの中にもいくつかサービスがあり、簡単にですが以下に記載します。
- Amazon Q Business
- 質問への回答やサードパーティサービスとのコネクタを使用することで組織が保有するデータを元にしたQ&A、自然言語によるタスクの実行ができる
- Amazon Q Developer
- 開発者向けの生成AIアシスタント。Q&Aやコード生成などができるサービスです。
その他、以下のサービスとの統合もあります。
- Amazon QuickSight
- Amazon Connect
- AWS Supply Chain
以下のブログでも取り扱っていますので、よろしければご覧ください。
AWS CloudFormationのテンプレートを書きたい
AWS CloudFormationのテンプレートは、細かな値を一つ一つ定義できる一方で、自分で設定しなければならない値が多く、何度も公式ドキュメントとエディタを行き来したことはありませんか?自分はAWS CloudFormationのテンプレート作成に慣れていないこともあり、結構行き来していました。
ある程度決まったパラメーターなどはドキュメントを行き来しなくても、テンプレートを書けるようになりたいな、という気持ちもありつつ、設定できるパラメーターや覚えることが多いと感じることがあります。
そこでAmazon Q Developerの出番です。
最初の簡単なまとめでもお伝えしたように、Amazon Q Developerにはコード生成機能がございます。
もちろん、AWS CloudFormationのテンプレートも生成の例外ではありません。
それでは早速やっていきましょう。
Amazon Q Developerをエディタ上で使用するには以下のものが必要となります。
- エディタに合った拡張機能(プラグイン)
- JetBrains IDE、Visual Studio Code、Visual Studio、コマンドライン(macOS)に対応
- Builder IDまたはProライセンスが割り当てられたIAM Identity Centerユーザー
今回はVisual Studio Codeを想定して触っていきたいと思います。
拡張機能のインストール
まずは、Visual Studio Code用の拡張機能をダウンロード、インストールを行います。
拡張機能は公式サイトからダウンロードできます。
Amazon Qの有効化、やってみる
拡張機能のインストール後、Builder IDまたはProライセンスが割り当てられたIAM Identity Centerユーザーでサインインします。
今回はFreeライセンスを使用するため、Use for Freeを選択して、Builder IDでサインインします。(ブラウザが開くのでサインイン、連携の承認をしてください)
連携完了後、チャットの画面が開き、ステータスバーのAmazon Qの表示で赤色のハイライトがされなくなれば、準備OKです。
チャット画面は今回使わないので、拡張機能のサイドバーを閉じておきましょう。
それでは早速新規ファイルを作成して、書いていきましょう!
YAMLで書いていくので、ファイル形式でYAMLを選択しておきます。
今回はシンプルに以下の構成を作っていきます。
Amazon Qはエディタで入力していくと候補を生成してくれます。
試しにVPCというコメントを入力してみます。すると、Amazon Q is generating...という表示がでます。
しばらくすると、生成した候補が表示されます。(Tabキーを押下することで確定できます。)
同じように図の構成を作っていきます。(1分もかからずテンプレートが作成できています。凄いです。)
できたもの
提示された候補をそのまま確定した結果が以下のようになります。
AWSTemplateFormatVersion: 2010-09-09
Description: Amazon Q Developer generate AWS CloudFormation template test
# VPC
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsHostnames: true
EnableDnsSupport: true
InstanceTenancy: default
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-vpc
# Public Subnet
PublicSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.0.0/24
AvailabilityZone: !Select [ 0, !GetAZs '' ]
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-public-subnet
# Private Subnet
PrivateSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.1.0/24
AvailabilityZone: !Select [ 0, !GetAZs '' ]
MapPublicIpOnLaunch: false
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-private-subnet
# Internet Gateway
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-igw
# Attach Internet Gateway to VPC
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
# Route Table
RouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-route-table
生成されたテンプレートの中で細かなパラメーターを見ていきます。
VPC
項目名 | 設定値 |
---|---|
Nameタグ | <スタック名>-vpc |
CIDR | 10.0.0.0/16 |
DNSホスト名 | 有効 |
DNS解決 | 有効 |
テナンシー | デフォルト |
パブリックサブネット
項目名 | 設定値 |
---|---|
Nameタグ | <スタック名>-public-subnet |
CIDR | 10.0.0.0/24 |
アベイラビリティーゾーン | 任意の1ゾーン |
パブリックIPv4アドレスの自動割り当て | 有効 |
プライベートサブネット
項目名 | 設定値 |
---|---|
Nameタグ | <スタック名>-private-subnet |
CIDR | 10.0.1.0/24 |
アベイラビリティーゾーン | 任意の1ゾーン |
パブリックIPv4アドレスの自動割り当て | 無効 |
インターネットゲートウェイ
項目名 | 設定値 |
---|---|
Nameタグ | <スタック名>-igw |
アタッチ先VPC | 本テンプレートで構築したVPC |
ルートテーブル
項目名 | 設定値 |
---|---|
Nameタグ | <スタック名>-route-table |
ルート | 10.0.0.0/16 local |
感想
なお、今回の検証では、AWS CloudFormationで実際にスタックを作成した際に、生成されたテンプレートを正常に利用・リソースの作成が成功しました。
一方で、インターネットゲートウェイが存在するのにもかかわらず、ルートテーブルではデフォルトで作成される、VPC内の通信(10.0.0.0/16)のみが定義されています。
そのため、インターネット宛の通信を行うためには、ルートテーブルに適切なルートを追加する必要があります。(例: 0.0.0.0/0をインターネットゲートウェイ宛)
ただ、ルートテーブルの修正のみを行うことで、インターネットアクセスを提供するVPCを簡単に構築できる点も魅力です。
終わりに
今回はAmazon Qを用いてAWS CloudFormationのテンプレートを作成してみました。
必ず自身の要件にあったものになっているか確認が必要であるものの、素早くテンプレートを作成することができました。
テンプレートの作成を高速化することにより、直ぐに実際の環境構築に取り掛かれる点は凄く魅力的なのではないでしょうか。
ぜひ皆様も触って見てください!